package com.example.fileuploaddownload.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.FieldFill;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 文件实体类
 * 用于在数据库中存储文件的基本信息
 */
@Data
@TableName("file_info")
public class FileEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 文件ID，主键
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 文件名
     */
    @TableField("file_name")
    private String fileName;

    /**
     * 文件原始名称（用户上传时的名称）
     */
    @TableField("original_name")
    private String originalName;

    /**
     * 文件大小（字节）
     */
    @TableField("file_size")
    private Long fileSize;

    /**
     * 文件类型（MIME类型）
     */
    @TableField("content_type")
    private String contentType;

    /**
     * 文件存储路径
     */
    @TableField("file_path")
    private String filePath;

    /**
     * 文件MD5值，用于校验文件完整性
     */
    @TableField("file_md5")
    private String fileMd5;

    /**
     * 文件上传状态：0-未完成，1-已完成
     */
    @TableField("upload_status")
    private Integer uploadStatus = 0;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /**
     * 上传进度（百分比）
     */
    @TableField("upload_progress")
    private Double uploadProgress = 0.0;

    /**
     * 最后修改时间（用于断点续传）
     */
    @TableField("last_modified")
    private Date lastModified;
    
    /**
     * 文件标识符（用于断点续传）
     */
    @TableField("identifier")
    private String identifier;
    
    /**
     * 总分片数
     */
    @TableField("total_chunks")
    private Integer totalChunks = 0;
    
    /**
     * 已上传分片数
     */
    @TableField("uploaded_chunks")
    private Integer uploadedChunks = 0;
    
    /**
     * 分片大小（字节）
     */
    @TableField("chunk_size")
    private Integer chunkSize = 0;
    
    /**
     * 下载次数
     */
    @TableField("download_count")
    private Integer downloadCount = 0;
}